<?php
include_once 'Connexion.class.php';


 /*
 *  la classe UserDAO va servir de passerelle entre la base et le site, 
 *  elle va remplir des objets de type User
 *  Elle ajouter, modifier, supprimer, récupérer ces objets depuis la base.
 *  Elle peut aussi serializé le contenu du panier pour l'enregistrer en base
 *  Elle hérite de Connexion pour récupérer l'objet PDO. 
 * 
 */





class UserDAO extends Connexion{
     public function __Construct() {
        parent::__Construct();
     }
     
    // renvoi true  si le user a été ajouté avec succès
    public function ajouterUser(User $user){
        $req = "INSERT INTO user VALUES(NULL, '".$user->getNom()."', '".$user->getPrenom()."','".$user->getLogin()."','".$user->getMdp()."','".$user->getEmail()."', '".$user->getDateNaissance()."', ".$user->estAdmin().", NULL)";
        $stmt = $this->_PDO->exec($req);
        if($stmt == 1){
            return true;
        }
        else
            return false;
    }
    
     public function getUserByIdAvis($id){
        $user;
        $stmt = $this->_PDO->query("SELECT user.id, nom, prenom, login, mdp, email, dateNaissance, estAdmin, panierSerialize  FROM user JOIN avis ON user.id = avis.idAuteur WHERE avis.id = ".intval($id).";");
        
        if($stmt->rowCount() > 0){
            $user = $this->hydrateUser($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $user = null;
        return $user;
    }
    
    public function getUserByLogin($nom){
        $user;
        $stmt = $this->_PDO->query("SELECT * FROM user WHERE login = '".$nom."' ;");
        if($stmt->rowCount() > 0){
            $user = $this->hydrateUser($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $user = null;
        return $user;
    }
    
    public function getUserById($idUser){
        $user;
        $stmt = $this->_PDO->query("SELECT * FROM user WHERE id = ".  intval($idUser)." ;");
        if($stmt->rowCount() > 0){
            $user = $this->hydrateUser($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $user = null;
        return $user;
    }
    
    
    public function getAllUser(){
        $user = array();
        
        $stmt = $this->_PDO->query("SELECT * FROM user;");
        
        if($stmt->rowCount() > 0){
            
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
            $user[] = $this->hydrateUser($data);
            }
            
        }
        else
            $user = null;
        return $user;
        
    }
    
    public function modifierUser(User $user){
        $req = "UPDATE user SET ";
        $req .= "nom = '".$user->getNom()."', ";
        $req .= "prenom = '".$user->getPrenom()."', ";
        $req .= "login = '".$user->getLogin()."', ";
        $req .= "mdp = '".$user->getMdp()."', ";
        $req .= "email = '".$user->getEmail()."', ";
        $req .= "dateNaissance = '".$user->getDateNaissance()."', ";
        $req .= "estAdmin = ".$user->estAdmin()." ";
        $req .= "WHERE id = ".$user->getId()." ;";
//        echo $req;
        $res = $this->_PDO->exec($req);
        if($res == 1)
            return true;
        else
            return false;
    }
    
     public function sauvegarderPanierUser(Panier $panier, $idUser){
         
        //echo serialize($panier);
         
        $res = $this->_PDO->exec("UPDATE user SET panierSerialize = '".$this->serializeProduitsPanier($panier)."' WHERE id = $idUser ; " );
        if($res == 1)
            return true;
        else
            return false;
    
     }
    
    
    
    public function supprimerUser($idUser){
        $res = $this->_PDO->exec("DELETE FROM user WHERE id = ".$idUser." ;");
        if($res == 1)
            return true;
        else
            return false;
    }
    
     public function viderPanierEnBase($idUser){
        $this->_PDO->exec("UPDATE user SET panierSerialize = NULL WHERE id = ".$idUser." ;");
    }
    
    
    public function hydrateUser($data){
        $lesp = array();
        $panierBase = $data->panierSerialize;
        if($panierBase == null){
            $panier = new Panier($lesp);
        }
        else{
              $panier = new Panier($this->unSerializeProduitsPanier($panierBase));
        }
        return new User($data->id, $data->nom, $data->prenom, $data->login, $data->mdp, $data->email, $data->dateNaissance, $data->estAdmin, $panier);
    }
    
    
     public function serializeProduitsPanier(Panier $panier){
        $ser = array();
        $idp = 0;
        $qte = 0;
        foreach ($panier->getLesProduitPanier() as $produitPanier) {
            $idp = $produitPanier->getProduitPanier()->getReference();
            $qte = $produitPanier->getQuantiteProduit();
            $arr = array("idp"=>$idp, "qte" =>$qte);
            $ser[] = $arr;
        }
        
        return serialize($ser);
        
        
    }
    
    
     public function unSerializeProduitsPanier($produitsPanierSerialize){
        $produitsPanier = array();
        $produitDAO = new ProduitDAO();
        
        $uns = unserialize($produitsPanierSerialize);
        
        foreach ($uns as $array) {
            $produit = $produitDAO->getProduitById($array['idp']);
            $produitsPanier[] = new ProduitPanier($produit, $array['qte']);
        }
        
        return $produitsPanier;
        
        
    }
    
    
    
    
}



?>
